#include <stdio.h>

int add(int, int);
int sub(int, int);
int calc(int (*)(int, int), int, int);
int (*select(char))(int, int);

int add(int num1, int num2)
{
	return num1 + num2;
}

int sub(int num1, int num2)
{
	return num1 - num2;
}

int calc(int (*fp)(int, int), int num1, int num2)
{
	return (*fp)(num1, num2);
}

int (*select(char op))(int, int)
{
	switch(op)
	{
		case '+': return add;
		case '-': return sub;
	}
}

int main()
{	
	int num1, num2;
	char op;
	int (*fp)(int, int);
	
	printf("请输入一个式子(如1+3)：");
	scanf("%d%c%d",&num1, &op, &num2);
	
	fp = select(op);
	printf("%d %c %d = %d\n",num1, op, num2, calc(fp, num1, num2));	

	return 0;
}


/*
 代码执行流程示例：
假设用户输入 1+3：
num1 = 1，op = '+'，num2 = 3
fp = select('+')，所以 fp 指向 add 函数。
调用 calc(fp, 1, 3)，相当于调用 add(1, 3)，结果是 4。
输出 1 + 3 = 4。
假设用户输入 5-2：
num1 = 5，op = '-'，num2 = 2
fp = select('-')，所以 fp 指向 sub 函数。
调用 calc(fp, 5, 2)，相当于调用 sub(5, 2)，结果是 3。
输出 5 - 2 = 3。
*/
